package chaoyue.study.reflect;

import java.lang.reflect.Method;

/**
 * 通过反射机制调用对象的方法
 * 获取方法依赖方法名和参数列表
 */
public class Test10 {
    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("chaoyue.study.reflect.bean.User");
        // 通过方法名名和参数列表获取方法
        Method doStatic = clazz.getMethod("doStatic");
        // 调用方法 对象和参数 如果方法是静态方法，可以直接通过class去调用，如果是实例方法，需要先创建对象
        doStatic.invoke(clazz);
        Method doSome = clazz.getMethod("doSome", String.class, Integer.class);
        // 实例方法的调用需要先创建对象，所以这样写是不行的
        // doSome.invoke(clazz, "chaoyue", 20);
        Object o = clazz.newInstance();
        System.out.println(doSome.invoke(o, "chaoyue", 20));
        // 当然静态方法也可以通过实例去调用,但不推荐这种方式，容易产生误解
        doStatic.invoke(o);
    }
}
